#ifndef CONFIGURACIONES_H
#define CONFIGURACIONES_H

#include <map>
#include <ticpp.h>

/**
 * La clase que parsea y guarda los parametros de configuracion en 
 * un archivo xml
 */
class Configuraciones {
	private:
		// Guarda el nombre del archivo de configuracion
		std::string _nomArchXML;

		// Indica si existe el archivo señalado
		bool existeArch(std::string nomArch);

		// Crea un archivo de configuraciones con valores por defecto
		void crearConfigXML(ticpp::Document& xml);

		// Carga el contenido del nodo en el mapa
		void procesarListado(std::map<std::string, std::string> &mapa, ticpp::Element* nodo,
			std::string key, std::string value);
		
		// Carga los parametros de configuracion basica
		void procesarConfiguracionBasica(ticpp::Element* nodo);

		// Carga el contenido del mapa en un elemento XML
		ticpp::Element buildListado(std::map<std::string, std::string> mapa, std::string grupo,
			std::string fila, std::string key, std::string value);

	public:
		// Por el nivel de acceso necesario a los atributos de la clase no
		// tiene sentido encapsularlos en setters y getters
		std::string baseDir;
		bool autenticacionBasica;
		unsigned short int timeout;
		unsigned short int nroPuerto;
		unsigned short int nroPuertoCtrl;
		unsigned short int maxConexionesSimultaneas;
		unsigned short int maxConexionesCliente;

		// Los mapas de las listas de parametros
		std::map<std::string, std::string> mapUsuarios;
		std::map<std::string, std::string> mapTiposEstaticos;
		std::map<std::string, std::string> mapTiposDinamicos;
		std::map<std::string, std::string> mapPaginasErrores;

		// Constructor y destructor
		Configuraciones(std::string nomArch, bool crear=false);
		virtual ~Configuraciones();

		// Guarda los datos a disco
		void guardar();
};


#endif
